package eteam.aps.service;

import eteam.aps.common.helper.JsonPage;
import eteam.aps.model.dto.ProductInfoDto;
import eteam.aps.model.entity.ProductInfo;
import eteam.aps.model.vo.ProductInfoListVo;
import eteam.aps.model.vo.ProductInfoVo;

import java.util.List;
import java.util.Map;

/**
 * 产品信息增删改查相关接口
 *
 * @author WMT
 */
public interface ProductInfoService {
    /**
     * 新增产品信息，包括新增产品参数子表
     * @param equipInfoDto 产品、产品参数子表数据
     * @return 受影响的行数
     */
    int insert(ProductInfoDto equipInfoDto);

    /**
     * 逻辑删除产品信息，需要设置修改时间和修改人，同时逻辑删除对应产品参数子表数据
     * @param productInfo 产品信息
     * @return 受影响的行数
     */
    int delete(String fId);

    /**
     * 修改产品信息，包括修改产品参数子表
     * @param equipInfoDto 产品、产品参数数据
     * @return 受影响的行数
     */
    int update(ProductInfoDto equipInfoDto);

    /**
     * 统计产品名称的数量
     * @param equipName 产品名称
     * @return 数量
     */
    int selectCountByPeName(String equipName);

    /**
     * 统计产品编号的数量
     * @param equipCode 产品编号
     * @return 数量
     */
    int selectCountByPeCode(String equipCode);

    /**
     * 根据fId查询状态
     * @param fId fId
     * @return 状态
     */
    int selectFStateByFId(String fId);

    /**
     * 根据装备fId查询产品详情
     * @param fId fId
     * @return 产品详情,包括对应的产品参数子表详情
     */
    List<ProductInfoVo> selectDetails(String fId);

    /**
     * 根据产品fId查询装备信息
     * @param fId 产品fId
     * @return 产品信息
     */
    ProductInfo selectByFId(String fId);

    /**
     * 分页查询产品数据
     * @param map 分页数据
     * @param page 第几页 从1开始 必传
     * @param pageSize 每页条数 必传
     * @param fProductCategory 产品分类归属【1：装备，2：器材，3：机工具】
     * @return 产品列表
     */
    JsonPage<ProductInfoListVo> selectAll(Map<String, Object> map, int page, int pageSize,int fProductCategory);

    /**
     * 根据装备分类fId统计该分类下的装备总数
     * @param fEcId 装备分类fId
     * @return 装备总数
     */
    int selectCountAllByFEcId(String fEcId);

    /**
     * 根据fId启用序列号管理
     * @param fId fId
     * @return 受影响的行数
     */
    int setEnable(String fId);

    /**
     * 根据fId停用序列号管理
     * @param fId fId
     * @return 受影响的行数
     */
    int setDisable(String fId);

    /**
     * 查询装备列表
     * @return 装备列表
     */
    List<ProductInfoVo> selectEquipList();
}
